#include <stdio.h>
#include <stdlib.h>
#include <ncurses.h>
#include <curses.h>
#include <assert.h>
#include <time.h>
#include "Jeu.h"


void ncursAff( WINDOW* win, const Jeu * j)

{
        int x,y,i_crea, i_tour;

        const Terrain *Ter = jeuGetConstTerrain(j);

        wclear(win);
       
        if(game_over(j)) 
        {
               
                mvwprintw( win, 5, 5, "%s", "GAME OVER" );
        }
        
        else if( victoire(j))
        
        {
				mvwprintw( win, 5, 5, "%s", "VICTORY" );
				
		}
		
		else
        
        { 
       
       
			for( x = 0; x < getDimx(Ter); ++x )
		   
			{                                                                              
				   
					for( y = 0; y < getDimy(Ter); ++y)
				   
					{
						   
							mvwprintw( win, y, x, "%c", terGetXY(Ter,x,y) );
				   
					}
		   
			}
		   
		   
		   
			for( i_crea = 0; i_crea < ( j->nb_creatures ); ++i_crea)
		   
			{
				   
					if( j->tabcrea[i_crea].vivant == 1 && j->tabcrea[i_crea].pointDeVie_Actuels > 0)
				   
					{
						   
							mvwprintw( win, j->tabcrea[i_crea].positionY, j->tabcrea[i_crea].positionX, "%c", 'C');
				   
					}
		   
			}
			
			for(i_tour=0;i_tour<j->nb_tours;++i_tour)
			
			{
				
				if(j->tabtour[i_tour].disponible == 0)
				
				{
					
					mvwprintw( win, j->tabtour[i_tour].y, j->tabtour[i_tour].x, "%c", 'T');
				
				}
					mvwprintw( win, 12,0, "Nombre de tours disponibles = %d", j->nb_tours - j->nbtour_place);
					
			}
		mvwprintw( win, 14,0, "Nombre de Ressources restantes = %d", j->Ressources);
		mvwprintw( win, 15,0, "Nombre de PV restants = %d", j->PV_joueur);
	}
}






void ncursBoucle(Jeu *j)
{
        WINDOW *win, *screen;
        int continue_boucle, c, x, y;


         /* Horloges (en secondes) */
    float horloge_courante, horloge_precedente;

    /* Intervalle de temps (en secondes) entre deux évolutions du jeu */
    /* Changer la valeur pour ralentir ou accélérer le déplacement des fantomes */
    float intervalle_horloge = 0.1f;

        screen = initscr();             /* passe l'écran texte en mode NCurses */
        clear();                /* efface l'écran */
        noecho();       /* Lorsqu'une touche est préssée au clavier, elle n'apparait pasa à l'écran */
        cbreak();               /* un caractère est directement affiché, il ne passe pas dans un buffer */

        /* Creation d'une nouvelle fenetre en mode texte */
        /* => fenetre de dimension et position ( WIDTH, HEIGHT, STARTX,STARTY) */
        x = 5;
        y = 5;
        win = newwin( getDimy(jeuGetConstTerrain(j))+5, getDimx(jeuGetConstTerrain(j))+5, x, y );
        keypad(win, TRUE);              /* pour que les flèches soient traitées (il faut le faire après création de la fenêtre) */

        /*halfdelay(temps_dizieme);*/
        /* notimeout(win,true); */
        /* wtimeout( win, 500 ); */
        nodelay(win,true); /* Pour que l'appel à wgetch soit non-bloquant */

        continue_boucle = 1;

        /* Récupère l'horloge actuelle et la convertit en secondes */
    /* clock() retourne le nombre de tops horloge depuis le lancement du programme */
    horloge_precedente = (float)clock()/(float)CLOCKS_PER_SEC;
       
    ncursAff( win, j);

        do
        {
        /* Récupère l'horloge actuelle et la convertit en secondes */
        /* clock() retourne le nombre de tops horloge depuis le lancement du programme */
                horloge_courante = (float)clock()/(float)CLOCKS_PER_SEC;
                
                if (horloge_courante-horloge_precedente>=intervalle_horloge)
                {
                        jeuEvolue(j);
                        ncursAff( win, j);
                        horloge_precedente = horloge_courante;
                }
       
                c = wgetch(win);
                switch(c)
                {
					
                        case KEY_UP:
								--y;
                                break;
                        case KEY_RIGHT:
								++x;
                                break;
                        case KEY_DOWN:
								++y;
                                break;
                        case KEY_LEFT:
								--x;
                                break;
                        case 27: /*ECHAP*/
                                continue_boucle = 0;
                                break;
                       /* case 'x' :
								x = 2;
								y = 6;
								break;*/
                        case 10 : /*ENTREE*/
								jeuActionClavier(j,'t',x,y);
								ncursAff(win,j);
								break;
                                
                        case 46 : /* SUPPR */
								jeuActionClavier(j,'x',x,y);
								ncursAff(win,j);
								break;
                }
                wmove( win, y, x);
               

        } while (continue_boucle==1);
        
    assert(delwin(win)!=ERR);
    assert(delwin(screen)!=ERR);

        endwin();
}
